/**
 * @file errormessages.c
 * @author Yao Zongyou <yaozy2010@gmail.com>
 * @date 2011-03-30
 */

#define WIN32_LEAN_AND_MEAN
#include "../master.h"
#include "../comfunct/comfunct.h"
#include <stdio.h>

#include "errormessages.h"

EXPORT ErrorInfoA()
{
	LPVOID lpMsgBuf;

	FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
				NULL,
				GetLastError(),
				MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
				(LPSTR)&lpMsgBuf,
				0,
				NULL
				);

	MessageBoxA(NULL, lpMsgBuf, GetLocalTextA(151), MB_OK | MB_ICONINFORMATION);
	LocalFree(lpMsgBuf);     /* FormatMessage allocated memory for the string, so 
							    we must free it */

	return;
}

EXPORT ErrorInfoW()
{
	LPVOID lpMsgBuf;

	FormatMessageW(
				FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
				NULL,
				GetLastError(),
				MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
				(LPWSTR)&lpMsgBuf,
				0,
				NULL
				);

	MessageBoxW(NULL, lpMsgBuf, GetLocalTextW(151), MB_OK | MB_ICONINFORMATION);
	LocalFree(lpMsgBuf);     /* FormatMessage allocated memory for the string, so 
							    we must free it */

	return;
}

EXPORT ErrorMessageA(LPCSTR MessageText)
{
	MessageBoxA(NULL, MessageText, GetLocalTextA(151), MB_OK | MB_ICONERROR);

	return;
}

EXPORT ErrorMessageW(LPCWSTR MessageText)
{
	MessageBoxW(NULL, MessageText, GetLocalTextW(151), MB_OK | MB_ICONERROR);

	return;
}

EXPORT HRErrorInfoA(HRESULT hr)
{
	LPVOID lpMsgBuf;

	FormatMessageA(
				FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
				NULL,
				hr,
				MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
				(LPSTR)&lpMsgBuf,
				0,
				NULL
				);

	MessageBoxA(NULL, lpMsgBuf, GetLocalTextA(151), MB_OK | MB_ICONERROR);
	LocalFree(lpMsgBuf);     /* FormatMessage allocated memory for the string, so
							    we must free it */
}

EXPORT HRErrorInfoW(HRESULT hr)
{
	LPVOID lpMsgBuf;

	FormatMessageW(
				FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
				NULL,
				hr,
				MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
				(LPWSTR)&lpMsgBuf,
				0,
				NULL
				);

	MessageBoxW(NULL, lpMsgBuf, GetLocalTextW(151), MB_OK | MB_ICONERROR);
	LocalFree(lpMsgBuf);     /* FormatMessage allocated memory for the string, so
							    we must free it */
}

EXPORT DebugPrintA(LPCSTR szFormat, LPCVOID Arg1, LPCVOID Arg2)
{
	char szBuffer[500] = {0};
	_snprintf(szBuffer, 499, szFormat, Arg1, Arg2);
	ErrorMessageA(szBuffer);
	return;
}

EXPORT DebugPrintW(LPCWSTR szFormat, LPCVOID Arg1, LPCVOID Arg2)
{
	WCHAR szBuffer[500] = {0};
	_snwprintf(szBuffer, 499, szFormat, Arg1, Arg2);
	ErrorMessageW(szBuffer);
}
